﻿//#define _CRT_SECURE_NO_WARNINGS
//#include <stdio.h>
// 下面是对单目操作符的讲解 + 比较运算符 二目运算符 还有 += 运算符 等 +10 例
// 单目运算符的讲解 ! + - &(取地址) sizeof(获取变量或数据类型大小) ~(取反) 
// 单目运算符的讲解 ++ -- 以及 *(解引用指针时使用) ++ (强制类型转换) 等

#include "common.h"

int monocular()
{
	printf("下面是对单目操作符的讲解");
	int zhenshu = 1;
	// C语言中的0代表假，非0代表真
	int flag = 0;  // 表示flag为假
	if (!flag) // 因为flag为假，所以会执行下面的代码
	{
		printf("当 flag 为假时执行的代码\n");
	}
	else{printf("当 flag 为真时执行的代码\n");}
	int arr1[10] = { 0 };
	printf("字符型的大小为%zu\n", sizeof(char)); // 字符型的大小为1
	printf("整型zhenshu的大小为%zu\n", sizeof zhenshu); // -> 4
	printf("arr1的大小为%zu\n", sizeof(arr1)); // -> 40 因为整型数组的大小为元素个数乘以每个元素的大小，数组arr1有10个元素，每个元素的大小为4个字节
	printf("arr1[0]的大小为%zu\n", sizeof(arr1[0])); // -> 4 因为arr1[0]是一个整型变量，整型变量的大小为4个字节
	printf("arr1元素个数为%zu\n", sizeof(arr1) / sizeof(arr1[0])); // -> 10 因为数组arr1的大小为40个字节，每个元素的大小为4个字节，所以元素个数为40/4=10
	int l1 = 1;
	printf("1取反的值为 %d\n", ~l1); // -> -2 学习
	int num1 = 10;
	int num2 = num1++; // 后++ 先赋值后加1，相当于 num2 = num1; num1 = num1 + 1
	printf("num1的值为 %d\n", num1); // -> 11
	printf("num2的值为 %d\n", num2); // -> 10
	int num3 = ++num1; // 前++ 先加1后赋值，相当于num1 = 11; num1 = num1 + 1; num3 = num1
	printf("num1的值为 %d\n", num1); // -> 12
	printf("num3的值为 %d\n", num3); // -> 12
	
	double fudian = 3.14;// 浮点数默认类型为double
	int fudian_copy = (int)3.14;// 强制类型转换，向小取整，只能截取整数部分
	// int m = int(3.14); // -> error注意：跨类型转换必须用一个
	printf("浮点数 %f 强制类型转换为 %d\n", fudian, fudian_copy);
	return 0;
}

void study11()
{
	monocular();
}
